<?php

namespace Models;

abstract class AbstractModel extends \Phalcon\Mvc\Model {

    /**
     * @param null $parameters
     * @return \Phalcon\Mvc\ResultsetInterface
     */
    public static function find($parameters = null) {
        return parent::find($parameters);
    }

    /**
     * @param null $parameters
     * @return \Phalcon\Mvc\Model
     */
    public static function findFirst($parameters = null) {
        return parent::findFirst($parameters);
    }

    //protected static $_cache = array();
    //
    ///**
    // * Implement a method that returns a string key based
    // * on the query parameters
    // */
    //protected static function _createKey($parameters) {
    //    $uniqueKey = array();
    //
    //    foreach ($parameters as $key => $value) {
    //        if (is_scalar($value)) {
    //            $uniqueKey[] = $key . ':' . $value;
    //        } else {
    //            if (is_array($value)) {
    //                $uniqueKey[] = $key . ':[' . self::_createKey($value) . ']';
    //            }
    //        }
    //    }
    //
    //    return join(',', $uniqueKey);
    //}
    //
    //public static function find($parameters = null) {
    //    //Create an unique key based on the parameters
    //    $key = self::_createKey($parameters);
    //
    //    if (!isset(self::$_cache[$key])) {
    //        //Store the result in the memory cache
    //        self::$_cache[$key] = parent::find($parameters)->toArray();
    //    }
    //
    //    //Return the result in the cache
    //    return self::$_cache[$key];
    //}
    //
    //public static function findFirst($parameters = null) {
    //    //Create an unique key based on the parameters
    //    $key = self::_createKey($parameters);
    //
    //    if (!isset(self::$_cache[$key])) {
    //        //Store the result in the memory cache
    //        self::$_cache[$key] = parent::findFirst($parameters)->toArray();
    //    }
    //
    //    //Return the result in the cache
    //    return self::$_cache[$key];
    //}

    //public static function find3($parameters=null)
    //{
    //
    //    //Convert the parameters to an array
    //    if (!is_array($parameters)) {
    //        $parameters = array($parameters);
    //    }
    //
    //    //Check if a cache key wasn't passed
    //    //and create the cache parameters
    //    if (!isset($parameters['cache'])) {
    //        $parameters['cache'] = array(
    //            "key" => self::_createKey($parameters),
    //            "lifetime" => 300
    //        );
    //    }
    //
    //    return parent::find($parameters);
    //}
    //
    //public static function findFirst($parameters = null) {
    //    // ...
    //}
    //
    //public static function find2($parameters=null)
    //{
    //
    //    //Create an unique key based on the parameters
    //    $key = self::_createKey($parameters);
    //
    //    if (!isset(self::$_cache[$key])) {
    //
    //        //We're using APC as second cache
    //        if (apc_exists($key)) {
    //
    //            $data = apc_fetch($key);
    //
    //            //Store the result in the memory cache
    //            self::$_cache[$key] = $data;
    //
    //            return $data;
    //        }
    //
    //        //There are no memory or apc cache
    //        $data = parent::find($parameters);
    //
    //        //Store the result in the memory cache
    //        self::$_cache[$key] = $data;
    //
    //        //Store the result in APC
    //        apc_store($key, $data);
    //
    //        return $data;
    //    }
    //
    //    //Return the result in the cache
    //    return self::$_cache[$key];
    //}
    //
    //protected static function _getCache($key)
    //{
    //    // returns data from a cache
    //}
    //
    //protected static function _setCache($key)
    //{
    //    // stores data in the cache
    //}
    //
    //public static function find4($parameters=null)
    //{
    //    //Create a unique key
    //    $key = self::_createKey($parameters);
    //
    //    //Check if there are data in the cache
    //    $results = self::_getCache($key);
    //
    //    // Valid data is an object
    //    if (is_object($results)) {
    //        return $results;
    //    }
    //
    //    $results = array();
    //
    //    $invoices = parent::find($parameters);
    //    foreach ($invoices as $invoice) {
    //
    //        //Query the related customer
    //        $customer = $invoice->customer;
    //
    //        //Assign it to the record
    //        $invoice->customer = $customer;
    //
    //        $results[] = $invoice;
    //    }
    //
    //    //Store the invoices in the cache + their customers
    //    self::_setCache($key, $results);
    //
    //    return $results;
    //}

}
